package br.com.tcc.systemdx.domain;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import br.com.tcc.systemdx.domain.enumtypes.ProbabilidadeSimbolica;

@Entity
@Table(name = "fatorrelevante")
public class FatorRelevante extends BaseEntityAssociated<FatorRelevante> {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 305509500206184896L;
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name="doencaid", nullable=true, updatable = false)
	private DescricaoDoenca doenca;
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name="atributoid", nullable=false, updatable = true)
	private AtributoFatorRelevante atributo;
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name="valorid", nullable=false, updatable = true)
	private ValorFatorRelevante valor;
	
	@Enumerated(EnumType.ORDINAL)
	private ProbabilidadeSimbolica probabilidade;
	
	@OneToMany(mappedBy = "parent", cascade = { CascadeType.MERGE,
			CascadeType.PERSIST }, fetch = FetchType.LAZY)
	private List<FatorRelevante> elaboracao;

	public AtributoFatorRelevante getAtributo() {
		return atributo;
	}

	public void setAtributo(AtributoFatorRelevante atributo) {
		this.atributo = atributo;
	}

	public ValorFatorRelevante getValor() {
		return valor;
	}

	public void setValor(ValorFatorRelevante valor) {
		this.valor = valor;
	}

	public List<FatorRelevante> getElaboracao() {
		return elaboracao;
	}

	public void setElaboracao(List<FatorRelevante> elaboracao) {
		this.elaboracao = elaboracao;
	}
	
	public boolean isElaborado() {
		return (elaboracao != null && !elaboracao.isEmpty());
	}

	public void setProbabilidade(ProbabilidadeSimbolica probabilidade) {
		this.probabilidade = probabilidade;
	}

	public ProbabilidadeSimbolica getProbabilidade() {
		return probabilidade;
	}

	public DescricaoDoenca getDoenca() {
		return doenca;
	}

	public void setDoenca(DescricaoDoenca doenca) {
		this.doenca = doenca;
	}

}
